package mongodb

import (
	"beergo/lib/tool"
	"fmt"
)

//func GenerateConfig(c *document.Creator) {
//	for _, field := range c.Fields {
//		field.CreateConfig()
//	}
//	CreateOrmConfigFile(c)
//}
func createDocumentFile(c *Creator, content []byte) {
	path := fmt.Sprintf(
		"%s/app/%s/documents/%s_.go",
		root, c.Table.Path, c.Table.Name)
	tool.CreateFile(path, content)
}
func createCrudFile(c *Creator, content []byte) {
	path := fmt.Sprintf(
		"%s/app/%s/documents/%s_CURD.go",
		root, c.Table.Path, c.Table.Name)
	tool.CreateFile(path, content)
}

/***************************Model创建*********************************/
type OrmField struct {
	Name string
	Type string
	Tags string
}

func CreateDocument(creator *Creator) {
	content:=twigger.Render("/mongodb/model.twig",creator)
	createDocumentFile(creator, []byte(content))
}
func CreateNestedDocument(creator *Creator) string {
	var content string
	for _, table := range creator.RelationTables {
		content += "\n"
		content += fmt.Sprintf("type %s struct {\n", table.Table.Name)
		for _, field := range table.Fields {

			content += fmt.Sprintf(
				"\t%s\t%s%s\t`json:\"%s\" bson:\"%s\"`\n",
				tool.Ucfirst(field.GetName()),
				field.GetType(),
				field.GetSrc(),
				field.GetName(),
				field.GetName(),
			)
		}
		content += "}\n"
	}
	return content
}

//
func CreateCrud(creator *Creator) {
	//tpl := ReadTpl("model_func")
	//tpl = strings.ReplaceAll(tpl, "__MODEL_NAME__", creator.Table.Name)
	//tpl = strings.ReplaceAll(tpl, "__APP_NAME__", appName)
	//
	//toArray := ""
	//for _, f := range creator.Fields {
	//	tmp := `
	//data["%s"] = this.%s`
	//	tmp = fmt.Sprintf(tmp, f.GetName(), tool.Ucfirst(f.GetName()))
	//	toArray += tmp
	//}
	//tpl = strings.ReplaceAll(tpl, "__TO_ARRAY__", toArray)
	//createCrudFile(creator, []byte(tpl))

	content:=twigger.Render("/mongodb/model_func.twig",creator)
	createCrudFile(creator, []byte(content))
}

//func MakeM2MToArrayEdit(f document.FieldItem) string {
//	tpl := `
//	this.GetOrm().LoadRelated(&this, "%s")
//	%s := make([]int, len(this.%s))
//	for idx, item := range this.%s {
//		%s[idx] = item.Id
//	}
//	data["%s"] = %s`
//	tpl = fmt.Sprintf(tpl,
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		f.GetName(),
//		tool.Ucfirst(f.GetName()))
//	return tpl
//}
//func MakeM2OToArrayEdit(f document.FieldItem) string {
//	tpl := `
//	if this.%s == nil {
//		data["%s"] = ""
//	}else {
//		data["%s"] = this.%s.Id
//	}`
//	tpl = fmt.Sprintf(tpl,
//		tool.Ucfirst(f.GetName()),
//		f.GetName(),
//		f.GetName(),
//		tool.Ucfirst(f.GetName()))
//	return tpl
//}
//
//func MakeM2MScan(f document.FieldItem) string {
//	tpl := `
//	if tool.HasSameWord(fields, parent + "%s") {
//		this.GetOrm().LoadRelated(&this,"%s")
//		dataMap := make([]interface{},len(this.%s))
//		for index, item := range this.%s {
//			if depth >0  && this.%s != nil {
//				dataMap[index] = item.Scan(fields,depth-1,"%s.")
//			}else {
//				dataMap[index] = item
//			}
//		}
//		data["%s"] = dataMap
//	}`
//	tpl = fmt.Sprintf(tpl,
//		f.GetName(),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		f.GetName(),
//		f.GetName())
//	return tpl
//}
//func MakeM2OScan(f document.FieldItem) string {
//	tpl := `
//	if tool.HasSameWord(fields, parent + "%s") {
//		this.GetOrm().LoadRelated(&this,"%s")
//		if depth >0  && this.%s != nil {
//			data["%s"] = this.%s.Scan(fields,depth-1,"%s.")
//		}else {
//			data["%s"] = this.%s
//		}
//	}`
//	tpl = fmt.Sprintf(tpl,
//		f.GetName(),
//		tool.Ucfirst(f.GetName()),
//		tool.Ucfirst(f.GetName()),
//		f.GetName(),
//		tool.Ucfirst(f.GetName()),
//		f.GetName(),
//		f.GetName(),
//		tool.Ucfirst(f.GetName()))
//	return tpl
//}
